package org.example.doubleFinger;

import org.example.link_list.ListNode;

public class Circular_Linked_List_II {
    public static void main(String[] args) {
        //环形链表 II

        //给定一个链表的头节点  head ，返回链表开始入环的第一个节点。 如果链表无环，则返回 null。
        //如果链表中有某个节点，可以通过连续跟踪 next 指针再次到达，则链表中存在环。 为了表示给定链表中的环，评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置（索引从 0 开始）。如果 pos 是 -1，则在该链表中没有环。注意：pos 不作为参数进行传递，仅仅是为了标识链表的实际情况。
        //不允许修改 链表。
        ListNode listNode31 = new ListNode(4);
        ListNode listNode41 = new ListNode(3,listNode31);
        ListNode listNode51 = new ListNode(2,listNode41);
        ListNode listNode2 = new ListNode(5,listNode51);
        ListNode listNode3 = new ListNode(4,listNode2);
        ListNode listNode4 = new ListNode(3,listNode3);
        ListNode listNode5 = new ListNode(2,listNode4);
        listNode31.next = listNode3;
        ListNode head = new ListNode(1,listNode5);
        ListNode node = get(head);
        System.out.println(node.val);
    }
    public static ListNode get(ListNode head){
        ListNode vir = new ListNode();
        vir.next = head;
        ListNode fast = vir;
        ListNode slow = vir;
        int i = 0 ;
        while(fast.next!=null && fast.next.next != null){
            if (i == 0){
                fast = fast.next.next;
            }else {
                fast=fast.next;
            }
            slow = slow.next;
            if (slow == fast){
                if (i!=0){
                    return fast;
                }
                slow = vir;
                i++;
            }
        }
        return null;
    }
}
